home *** CD-ROM | disk | FTP | other *** search
/ Chip 1996 November / Chip 11-96.iso / workshop / howto / vbell < prev    next >
Lisp/Scheme  |  1996-05-25  |  5KB  |  133 lines

  1.   Visible bell mini-Howto
  2.   Alessandro Rubini, rubini@ipvvis.unipv.it
  3.   v1.01, July 1994
  4.  
  5.   This doc explains something about termcap usage and provides Linux
  6.   with a patch to completely disable audible bells on demand.
  7.  
  8.   1.  Introduction
  9.  
  10.   The Linux console driver beeps the audible bell whenever a BEL char is
  11.   output (ASCII code 7).  Though this is a right choice for the default
  12.   behaviour, many users don't like their computer to beep. This mini-
  13.   Howto is meant to explain how to tell applications not to output the
  14.   BEL code. Pointers to a kernel patch are provided as well. The patch
  15.   is intended as a catch-all approach to avoid mangling with termcap and
  16.   applications' defaults.
  17.  
  18.  
  19.   2.  Basic Concepts about termcap
  20.  
  21.   The file /etc/termcap is a text file which lists the terminal
  22.   capabilities. Several applications use the termcap information to move
  23.   the cursor in the screen and do other screen-oriented tasks.  tcsh,
  24.   bash, vi and all the curses-based applications use the
  25.   termcapdatabase.
  26.  
  27.   The database represents various terminal types, and applications use
  28.   the TERM environment variable to refer to the right entry in termcap.
  29.   Each capability is then represented by a two-letter code associated to
  30.   the character string used to get the desired effect.  The separator
  31.   character between different capabilities is colon (":").  As an
  32.   example, the audible bell, whith code "bl", is usually represented by
  33.   the string "bl=^G", which instructs the applications to use the
  34.   control-G character, the ASCII BEL.
  35.  
  36.   In addition to the bl capability, there is a vb capability, which
  37.   represents the "visible bell". vb is usually missing in the console
  38.   entry in Linux' /etc/termcap.
  39.  
  40.  
  41.   3.  Defining a visible bell
  42.  
  43.   You can add the entry for the vb capability in your own termcap file.
  44.   Dennis Henriksen (duke@diku.dk) suggested to insert the following line
  45.   in the termcap entry for console:
  46.  
  47.  
  48.        :vb=\E7\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E8:\
  49.  
  50.  
  51.  
  52.  
  53.   The trailing backslash is used to escape the newline in the database.
  54.   Dennis' code does the following (his own words):
  55.  
  56.   o  Save the cursor position (Just a safety precaution)
  57.  
  58.   o  Change the background color several times between normal and
  59.      reverse
  60.  
  61.   o  Restore the cursor position.
  62.  
  63.  
  64.  
  65.  
  66.  
  67.   4.  Telling applications about it
  68.  
  69.   This is an incomplete list of applications that can be instrued to use
  70.   the vb entry for the current terminal type:
  71.  
  72.   o  tcsh (6.04 and later): "set visiblebell".  The instruction can
  73.      appear in .cshrc or can be issued interactively. To reset the
  74.      audible bell just "unset visiblebell".
  75.  
  76.   o  bash (with readline, as well as other readline based applications):
  77.      put "set prefer-visible-bell" in ~/.inputrc.
  78.  
  79.   o  nvi and elvis: put "set flash" in ~/.exrc or tell ":set flash"
  80.      interactively (note the colon).  To disable the visible bell use
  81.      noflash in place of flash.
  82.  
  83.   o  emacs: put "(setq visible-bell t)" in your ~/.emacs.  It is
  84.      disabled by "(setq visible-bell nil)".
  85.  
  86.  
  87.   5.  Disabling the audible bell
  88.  
  89.   If you want to force the visible bell on your console you can replace
  90.   the "bl" entry in termcap with the same string suggested for "vb"
  91.   above.  This approach can unload you from the task of customizing each
  92.   application.  I use this option on all the machines where I can run
  93.   Linux.
  94.  
  95.  
  96.   6.  Easier configurability
  97.  
  98.   If you want the ability to choose between audible and visible bell on
  99.   a console basis, you can use two different terminal types for the
  100.   linux console.  You can name them, for example, console and console-
  101.   vb.  The console entry would be the original one, while the other
  102.   could feature a visual bell string for the "bl" item.  Thus you can
  103.   change the behaviour of your bell on a console basis:
  104.  
  105.   o  With tcsh: "setenv TERM console-vb" to get a screen flash, and
  106.      "setenv TERM console" to get the audible beep.
  107.  
  108.   o  With bash: "TERM=console; export TERM" for the flash, and
  109.      "TERM=console-vb; export TERM" for the beep.
  110.  
  111.      Note that the termcap format allows to define a terminal-type in
  112.      terms of another, so you need to insert in the database only the
  113.      differences.  Refer to the manpages for more information.
  114.  
  115.  
  116.   7.  About the patch
  117.  
  118.   The bad news is that not all the applications are termcap-aware. Most
  119.   small programs feature 'backslash-a' characters in the C source code.
  120.   Those chars become a literal ASCII BEL in the executable binary.  less
  121.   is one of those applications. The only way to shut the loudspeaker for
  122.   these applications is to modify the console driver in the kernel.
  123.   Either, you may remove the loudspeaker altogether.
  124.  
  125.   The patch I provide is taken agains the 1.1.31 kernel sources, but it
  126.   applies fine to any kernel I know of (just remember to pass the -l
  127.   option to patch). The patch comes with a small user program to
  128.   set/unset visible and audible bells on a console basis. It is
  129.   available by ftp from sunsite.unc.edu as  /pub/Linux/......
  130.  
  131.  
  132.  
  133.